package com.xixibaby.fadada;

import com.xixibaby.fadada.dto.AccountVervify;
import com.xixibaby.fadada.dto.CompanyVervify;
import com.xixibaby.fadada.dto.Contract;
import com.xixibaby.fadada.dto.VervifyUrl;

/**
 * 线上合同标准接口
 * @author tooomj
 */
public interface ContractOnline {

    /**
     * 企业账号注册
     * @param userId 本地账户id
     * @return 第三方id
     */
    String registCompanyAccount(Long userId);


    /**
     * 个人账号注册
     * @param userId 本地账户id
     * @return 第三方id
     */
    String registCustomerAccount(Long userId);

    /**
     * 获取 个人/企业员工 实名认证地址
     * @param customerId 第三方id
     * @return 认证地址 + 交易号
     */
    VervifyUrl getCustomerVervifyUrl(String customerId);

    /**
     * 获取个人认证信息
     * @param transNo 实名认证交易号
     * @return 认证信息
     */
    AccountVervify getCustomerVervifyInfo(String transNo);

    /**
     * 获取企业用户认证信息
     * @param transNo 实名认证交易号
     * @return 认证信息
     */
    CompanyVervify getCompanyVervifyInfo(String transNo);


    /**
     * 获取企业实名认证地址
     * @param customerId 第三方id
     * @param companyName 公司名称
     * @return 认证地址 + 交易号
     */
    VervifyUrl getCompanyVervifyUrl(String customerId,String companyName);

    /**
     * 公司授权企业员工
     * @param companyId
     * @param personId
     */
    void authorization(String companyId,String personId);


    /**
     * 公司取消对企业员工的授权
     * @param companyId
     * @param personId
     */
    void unAuthorization(String companyId,String personId);



    /**
     * 手动签署地址
     * @param transId 交易号
     * @param customerId 第三方用户id
     * @param contractCode 合同编号
     * @param type 1 甲方 2 乙方
     * @return 签署地址
     */
    String getSignUrl(String transId,String customerId,String contractCode,Integer type,String title);


    /**
     * 自动签署合同 采用关键字方式
     * @param transId 交易号
     * @param customerId 指定签署人 第三方用户id
     * @param contractCode 合同编号
     */
    void autoSignContract(String transId,String customerId,String contractCode);


    /**
     * 基于合同参数生成合同类目
     * 签署的合同编号必须与这个合同编号一致
     *
     * @param templateId 合同模板id
     * @param contractCode 合同编号
     * @param params 合同参数 json 字符串
     * @return 合同信息 包含合同预览地址以及合同下载地址
     */
    Contract getContract(String templateId, String contractCode, String params);


    /**
     * 实名认证证书申请
     * 无返回，请求发过去并且无异常产生
     * @param customerId 用户第三方编号
     * @param transId 实名认证交易号
     */
    void applyCert(String customerId,String transId);

    /**
     * 合同模板
     * @param templateCode 模板编号
     * @param docUrl 模板pdf地址
     */
    void uploadTemplate(String templateCode,String docUrl);


    /**
     * 获取合同查询地址
     * @param contractCode 合同编号
     * @return 合同查询地址
     */
    String getContactViewUrl(String contractCode);

    /**
     * 获取合同下载地址
     * @param contractCode 合同编号
     * @return 下载地址
     */
    String downloadContract(String contractCode);

    /**
     * 合同归档
     * @param contractCode 合同编号
     */
    void fillingContract(String contractCode);

}
